package done.easy_401_500;

import org.junit.Test;

import static com.study.util.LogUtil.info;

/**
 * 463. Island Perimeter 岛屿的周长
 * <p>
 * 给定一个包含 0 和 1 的二维网格地图，其中 1 表示陆地 0 表示水域。
 * 网格中的格子水平和垂直方向相连（对角线方向不相连）。整个网格被水完
 * 全包围，但其中恰好有一个岛屿（或者说，一个或多个表示陆地的格子相连
 * 组成的岛屿）。
 * 岛屿中没有“湖”（“湖” 指水域在岛屿内部且不和岛屿周围的水相连）。格
 * 子是边长为 1 的正方形。网格为长方形，且宽度和高度均不超过 100 。计
 * 算这个岛屿的周长。
 * <p>
 * 示例 :
 * 输入:
 * [[0, 1, 0, 0],
 * [1, 1, 1, 0],
 * [0, 1, 0, 0],
 * [1, 1, 0, 0]]
 * <p>
 * 输出: 16
 * <p>
 * 解释: 它的周长是下面图片中的 16 个黄色的边：
 */
@SuppressWarnings("all")
public class IslandPerimeter {

    // 重点关注前面遍历过得方格，如果之前有相邻方格，就-2;
    public int islandPerimeter(int[][] grid) {
        // 190410 first
        return -1;
    }

    @Test
    public void test() {
        int[][] A = new int[][]{{0, 1, 0, 0},
                {1, 1, 1, 0},
                {0, 1, 0, 0},
                {1, 1, 0, 0}};
        for (int i = 0; i < A.length; i++) {
            info(A[i]);
        }
        info("{}", islandPerimeter(A));
    }
}


























/*
/ / 重点关注前面遍历过得方格，如果之前有相邻方格，就-2;
public int islandPerimeter(int[][] grid) {
    // 边界条件
    if (grid == null || grid.length == 0) {
        return 0;
    }
    // 周长
    int res = 0;
    // 行
    int row = grid.length;
    // 列
    int col = grid[0].length;

    // 行列扫描
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {

            //只有标记为 1 的才需要关注
            if (grid[i][j] == 1) {

                // 一个方块四个边
                res += 4;

                // 左边有方格 -2
                if (i > 0 && grid[i - 1][j] == 1) {
                    res -= 2;
                }

                // 上边有方格 -2
                if (j > 0 && grid[i][j - 1] == 1) {
                    res -= 2;
                }
            }
        }
    }
    return res;
}
*/
